home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib07.dsk / HI-RES DATA DISPLAY.bas < prev    next >
BASIC Source File  |  2023-02-26  |  7KB  |  254 lines

  1. 12  HOME : VTAB 5: HTAB 10: PRINT "GRAPHING PROGRAM 2"
  2. 13  VTAB 8: HTAB 12: PRINT "MONTH BY MONTH"
  3. 14  VTAB 15: HTAB 13: PRINT "R.M. SMYTHE"
  4. 15  FOR I = 1 TO 2000: NEXT 
  5. 16 :
  6. 17  REM  SET UP PROGRAM
  7. 18 :
  8. 19  GOSUB 10000: REM  INITIALIZE HRCG
  9. 20  POKE  -16302,0: LOMEM: 16400
  10. 25  DIM MO$(12): FOR I = 1 TO 12: READ MO$(I): NEXT I
  11. 26  DATA  JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC
  12. 30 M$ = "                                        "
  13. 40 S$ = "                                        "
  14. 50 FLAG = 0:FLAG$ = ""
  15. 60  DIM X(52),Y(52)
  16. 70 D$ =  CHR$(4):G$ =  CHR$(7)
  17. 97 :
  18. 98  REM  CONTROL CHARACTERS
  19. 99 :
  20. 100 CP$ =  CHR$(16): REM  CLEAR PAGE
  21. 110 CL$ =  CHR$(12): REM  LOWER CASE
  22. 120 CK$ =  CHR$(11): REM  UPPER CASE
  23. 130 CO$ =  CHR$(15): REM  OPTIONS
  24. 140 CS$ =  CHR$(19): REM  SHIFT
  25. 150 CY$ =  CHR$(25): REM  SET TEXT WINDOW TO FULL SCREEN
  26. 160 CA$ =  CHR$(1): REM  SELECT CHARACTER SET OR PAGE 1 OPTION
  27. 170  PRINT CO$,CA$: REM  USE PG 1
  28. 190  GOTO 1000
  29. 197 :
  30. 198  REM  DRAW X,Y AXES
  31. 199 :
  32. 200  PRINT CP$
  33. 210  GOSUB 600: REM  ADD SCALES
  34. 220  HCOLOR= 3: HPLOT 31,20 TO 31,151 TO 275,151
  35. 230  RETURN 
  36. 297 :
  37. 298  REM  PLOT POINTS
  38. 299 :
  39. 300  FOR I = 1 TO N -1
  40. 310 X1 =  INT(X(I) *FX%/MX +31)
  41. 320 Y1 =  INT(151 -Y(I) *122/MY +.5)
  42. 330 X2 =  INT(X(I +1) *FX%/MX +31)
  43. 340 Y2 =  INT(151 -Y(I +1) *122/MY +.5)
  44. 350  HCOLOR= 3
  45. 360  FOR J =  -1 TO 1: FOR K =  -1 TO 1
  46. 370  HPLOT X1 +J,Y1 +K
  47. 380  NEXT K,J
  48. 390  HCOLOR= 3: HPLOT X1,Y1 TO X2,Y2: NEXT 
  49. 400  FOR J =  -1 TO 1: FOR K =  -1 TO 1: HPLOT X2 +J,Y2 +K: NEXT K,J
  50. 410  RETURN 
  51. 597 :
  52. 598  REM  ADD SCALES TO GRAPH
  53. 599 :
  54. 600  VTAB 20: HTAB 5: PRINT HA$: VTAB 21: HTAB 5: PRINT SC$
  55. 605  IF S1$ < >""  THEN 610
  56. 606  VTAB 4: IF  LEN( STR$(MY)) >4  THEN  HTAB (4): GOTO 608
  57. 607  HTAB (8 - LEN( STR$(MY)))
  58. 608  PRINT MY: RETURN 
  59. 610 V% = 20
  60. 620 H% = 4: VTAB 22:V$ = S1$: GOSUB 9000
  61. 630 H% = 3: VTAB 22:V$ = S2$: GOSUB 9000
  62. 640 H% = 2: VTAB 22:V$ = S3$: GOSUB 9000
  63. 650  RETURN 
  64. 697 :
  65. 698  REM  BEGIN INPUT
  66. 699 :
  67. 700  PRINT CP$;CL$;CK$;"HOW MANY ENTRIES PER ";: INPUT "MONTH ?";NN: IF NN <0  OR NN >4  OR  INT(NN) < >NN  THEN 700
  68. 710  VTAB 3: IF NN = 4  THEN  INPUT "52 ENTRIES PER YEAR OR 48? ";FLAG$: IF FLAG$ < >"52"  AND FLAG$ < >"48"  THEN 710
  69. 720  IF FLAG$ = "52"  THEN  VTAB 6: PRINT "   WEEK       DATA": GOTO 740
  70. 730  VTAB 6: PRINT "MONTH        DATA"
  71. 740  HCOLOR= 3
  72. 750  HPLOT 10,52 TO 150,52
  73. 760  HPLOT 75,42 TO 75,191
  74. 770  VTAB 8: PRINT  CHR$(22)
  75. 780 MY = 0: IF FLAG$ = "52"  THEN 900
  76. 790 I = 1:MX = NN *12: FOR J = 1 TO 12
  77. 800  HTAB 4: PRINT MO$(J);: FOR K = 1 TO NN
  78. 810  HTAB (14):X(I) = I -1
  79. 820  HPLOT 75,90 TO 75,191: INPUT Y(I)
  80. 850  IF Y(I) >MY  THEN MY = Y(I)
  81. 870 I = I +1
  82. 880  NEXT K: PRINT : NEXT J
  83. 890 N = MX: RETURN 
  84. 900  FOR J = 1 TO 52: HTAB 4: PRINT  RIGHT$(" " + STR$(J),2);
  85. 910  HTAB (14):X(J) = J -1: HPLOT 75,90 TO 75,191: INPUT Y(J)
  86. 920  IF Y(J) >MY  THEN MY = Y(J)
  87. 930  NEXT J
  88. 940 N = 52:MX = 52: RETURN 
  89. 997 :
  90. 998  REM  *** MAIN PROGRAM ***
  91. 999 :
  92. 1000  POKE 34,0: PRINT CY$;CP$
  93. 1010  GOSUB 700: REM  INPUT DATA
  94. 1020  PRINT CY$;CP$: REM  CLEAR FULL SCREEN
  95. 1030  GOSUB 4000: REM  HORIZONTAL SCALE
  96. 1040  GOSUB 6000: REM  VERTICAL SCALE
  97. 1050  GOSUB 200: REM  DRAW AXES
  98. 1060  GOSUB 300: REM  PLOT
  99. 1070  POKE  -16368,0
  100. 1080 A =  PEEK( -16384): IF A <128  THEN 1080
  101. 1090  POKE  -16368,0
  102. 1100 A$ =  CHR$(A -128)
  103. 1110  IF A$ = "H"  THEN 1230
  104. 1120  IF A$ = "V"  THEN 1190
  105. 1130  IF A$ = "T"  THEN 1260
  106. 1140  IF A$ = "S"  THEN 1300
  107. 1150  IF A$ = "A"  THEN 1000
  108. 1160  IF A$ = "E"  THEN  VTAB 23: END 
  109. 1170  FOR I = 1 TO 20: NEXT 
  110. 1180  GOTO 1080
  111. 1190 H% = 1:V% = 20:L = 18
  112. 1200  GOSUB 8000
  113. 1210 FLAG = 1
  114. 1220  GOTO 1070
  115. 1230 L = 30:V% = 23
  116. 1240  GOSUB 7000
  117. 1250  GOTO 1070
  118. 1260 L = 35:V% = 2: GOSUB 7000: GOTO 1070
  119. 1270 :
  120. 1280  REM  SAVE
  121. 1290 :
  122. 1300  VTAB 10: PRINT G$;G$
  123. 1310 F$ = ""
  124. 1320  POKE  -16368,0
  125. 1330 A =  PEEK( -16384): IF A <128  THEN 1330
  126. 1340  POKE  -16368,0
  127. 1350 A$ =  CHR$(A -128): IF A$ =  CHR$(13)  THEN 1380
  128. 1360  IF F$ = ""  AND (A$ <"A"  OR A$ >"Z")  THEN 1300
  129. 1370 F$ = F$ +A$: GOTO 1330
  130. 1380  IF F$ = ""  THEN 1300
  131. 1390  PRINT G$;G$;G$:F$ = "GR-" +F$
  132. 1400  PRINT D$;"BSAVE";F$;",A8192,L8192"
  133. 1410  GOTO 1070
  134. 3997 :
  135. 3998  REM  HORIZONTAL SCALE
  136. 3999 :
  137. 4000 SC$ = "J  F  M  A  M  J  J  A  S  O  N  D"
  138. 4010 HA$ = "'  '  '  '  '  '  '  '  '  '  '  '"
  139. 4030 FX% = 247: RETURN 
  140. 5997 :
  141. 5998  REM  VERTICAL SCALE
  142. 5999 :
  143. 6000 S1$ = "":S2$ = S1$:S3$ = S2$: IF MY >100  THEN 6290
  144. 6010  IF MY >50  THEN MY = 100: GOTO 6100
  145. 6020  IF MY >20  THEN MY = 50: GOTO 6140
  146. 6030  IF MY >10  THEN MY = 20: GOTO 6170
  147. 6040  IF MY >5  THEN MY = 10: GOTO 6180
  148. 6050  IF MY >1  THEN MY = 5: GOTO 6200
  149. 6060  IF MY >.5  THEN MY = 1: GOTO 6210
  150. 6070  IF MY >.1  THEN MY = .5: GOTO 6230
  151. 6080  IF MY >.01  THEN MY = .1: GOTO 6250
  152. 6090  GOTO 6290
  153. 6100 S1$ = "0  0  0  0  0  0"
  154. 6110 S2$ = "0  8  6  4  2   "
  155. 6120 S3$ = "1               "
  156. 6130  RETURN 
  157. 6140 S1$ = "0  0  0  0  0  0"
  158. 6150 S2$ = "5  4  3  2  1   "
  159. 6160  GOTO 6280
  160. 6170 S1$ = "0  6  2  8  4  0":S2$ = "2  1  1         ": GOTO 6280
  161. 6180 S1$ = "0  8  6  4  2  0"
  162. 6190 S2$ = "1               ": GOTO 6280
  163. 6200 S1$ = "5  4  3  2  1  0": GOTO 6270
  164. 6210 S1$ = "0  8  6  4  2  0":S2$ = ".  .  .  .  .   "
  165. 6220 S3$ = "1               ": RETURN 
  166. 6230 S1$ = "0  0  0  0  0  0":S2$ = "5  4  3  2  1   "
  167. 6240 S3$ = ".  .  .  .  .   ": RETURN 
  168. 6250 S1$ = "0  8  6  4  2  0":S2$ = "1  0  0  0  0   "
  169. 6260 S3$ = ".  .  .  .  .   ": RETURN 
  170. 6270 S2$ = "                "
  171. 6280 S3$ = "                ": RETURN 
  172. 6290  RETURN : REM  SCIENTIFIC NOTATION COULD GO HERE
  173. 6997 :
  174. 6998  REM  LABEL X AXIS
  175. 6999 :
  176. 7000 B$ =  MID$ (M$,1,L)
  177. 7010  VTAB V%
  178. 7020  GOSUB 7040
  179. 7030  RETURN 
  180. 7040 I = 1
  181. 7050 H% = 40 -L -2
  182. 7060  HTAB (H%)
  183. 7070  PRINT  MID$ (B$, LEN(B$) -L +1, LEN(B$));
  184. 7080  HTAB (H% +L)
  185. 7090  GET X$: IF X$ =  CHR$(13)  THEN 7210
  186. 7100  IF X$ < > CHR$(8)  THEN 7150
  187. 7110  IF I = 1  THEN 7060
  188. 7120 B$ =  MID$ (B$,1, LEN(B$) -1)
  189. 7130 I = I -1
  190. 7140  GOTO 7060
  191. 7150  IF I = L +1  THEN 7060
  192. 7170  IF  ASC(X$) <32  THEN 7060
  193. 7180 B$ = B$ +X$
  194. 7190 I = I +1
  195. 7200  GOTO 7060
  196. 7210 B$ =  MID$ (B$, LEN(B$) -I +2, LEN(B$))
  197. 7220 B$ = B$ + MID$ (S$,1,L - LEN(B$))
  198. 7230  PRINT 
  199. 7240  RETURN 
  200. 7997 :
  201. 7998  REM  LABEL Y AXIS
  202. 7999 :
  203. 8000 B$ =  MID$ (M$,1,L)
  204. 8010  HTAB H%
  205. 8020  VTAB (V%)
  206. 8030  GOSUB 8050
  207. 8040  RETURN 
  208. 8050 I = 1
  209. 8060  VTAB (V%)
  210. 8070 V$ =  MID$ (B$, LEN(B$) -L +1, LEN(B$)): GOSUB 9000: REM  PRINT OUT VERTICAL STRING
  211. 8080  REM  VTAB(V%-L%)
  212. 8090  GET X$: IF X$ =  CHR$(13)  THEN 8210
  213. 8100  IF X$ < > CHR$(8)  THEN 8150
  214. 8110  IF I = 1  THEN 8060
  215. 8120 B$ =  MID$ (B$,1, LEN(B$) -1)
  216. 8130 I = I -1
  217. 8140  GOTO 8060
  218. 8150  IF I = L +1  THEN 8060
  219. 8170  IF  ASC(X$) <32  THEN 8060
  220. 8180 B$ = B$ +X$
  221. 8190 I = I +1
  222. 8200  GOTO 8060
  223. 8210 B$ =  MID$ (B$, LEN(B$) -I +2, LEN(B$))
  224. 8220 B$ = B$ + MID$ (S$,1,L - LEN(B$))
  225. 8230  PRINT 
  226. 8240  RETURN 
  227. 8997 :
  228. 8998  REM  PRINT OUT VERTICAL STRING
  229. 8999 :
  230. 9000  VTAB (V% - LEN(V$))
  231. 9010  FOR J = 1 TO  LEN(V$)
  232. 9020  HTAB (H%)
  233. 9030  PRINT  MID$ (V$,J,1)
  234. 9040  NEXT 
  235. 9050  RETURN 
  236. 9997 :
  237. 9998  REM  INITIALIZE HRCG
  238. 9999 :
  239. 10000  ONERR  GOTO 10130
  240. 10010  TEXT : HOME : HGR :ADRS = 0
  241. 10020  PRINT  CHR$(4);"BLOAD RBOOT": CALL 520
  242. 10030 ADRS =  USR(0),"HRCG"
  243. 10040  POKE 216,0
  244. 10050  IF ADRS <0  THEN ADRS = ADRS +65536
  245. 10060 CS = ADRS -768: HIMEM: CS
  246. 10070 D$ =  CHR$(4)
  247. 10080  PRINT D$;"BLOAD ASCII.SET,A";CS
  248. 10090 CH =  INT(CS/256):CL = CS -CH *256
  249. 10100  POKE ADRS +7,CL: POKE ADRS +8,CH: CALL ADRS +3
  250. 10110  RETURN 
  251. 10130  TEXT 
  252. 10140  PRINT "ERROR IN RLOAD OR RBOOT"
  253. 10150  POKE 216,0
  254. 10160  STOP